"use strict";

module.exports = function (grunt) {

  var pkg = grunt.file.readJSON("package.json");

  // Project configuration.
  grunt.initConfig({
    // Metadata.
    pkg: pkg,
    banner: grunt.file.read("dev/copy.js").replace(/@VERSION/, pkg.version),
    // Task configuration.
    uglify: {
      options: {
        banner: "<%= banner %>"
      },
      dist: {
        src: "<%= concat.dist.dest %>",
        dest: "<%= pkg.name %>-min.js"
      },
      nodeps: {
        src: "<%= concat.nodeps.dest %>",
        dest: "<%= pkg.name %>-nodeps-min.js"
      }
    },
    replace: {
      dist: {
        options: {
          patterns: [{
            match: "VERSION",
            replacement: "<%= pkg.version %>"
          }]
        },
        files: [{
          expand: true,
          flatten: true,
          src: ["<%= concat.dist.dest %>", "<%= concat.nodeps.dest %>"],
          dest: "./"
        }]
      }
    },
    concat: {
      dist: {
        dest: "<%= pkg.name %>.js",
        src: [
          "dev/eve.js",
          "dev/raphael.core.js",
          "dev/raphael.svg.js",
          "dev/raphael.vml.js",
          "dev/raphael.amd.js"
        ]
      },
      nodeps: {
        dest: "<%= pkg.name %>-nodeps.js",
        src: [
          "dev/raphael.core.js",
          "dev/raphael.svg.js",
          "dev/raphael.vml.js",
          "dev/raphael.amd.js"
        ]
      }
    }
  });

  // These plugins provide necessary tasks.
  grunt.loadNpmTasks("grunt-contrib-concat");
  grunt.loadNpmTasks("grunt-contrib-uglify");
  grunt.loadNpmTasks("grunt-replace");

  // Default task.
  grunt.registerTask("default", ["concat", "replace", "uglify"]);
};
